home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / Reference / DevCon / Orlando_1993 / Devcon93.1 / AREXX / SimpleRexx / SimpleRexx.txt < prev    next >
Encoding:
Text File  |  1993-01-11  |  7.3 KB  |  174 lines

  1.  
  2. SimpleRexx: A Simple ARexx Interface
  3.  
  4. by Michael Sinz
  5.  
  6. The ability to handle scripts is a powerful feature for any
  7. application.  Whenever users have a repetitive, well-defined job to do
  8. with application software, script capabilities allow them to perform
  9. the job automatically without any user intervention.  For example,
  10. many communication programs allow the user to set up a script which
  11. will automatically dial up a host system, login to it, and check for
  12. messages to download.  To encourage the development of more
  13. applications which have this powerful feature, Commodore has added
  14. ARexx to V2.0 of the Amiga system software.
  15.  
  16.  
  17.  
  18. What Is ARexx?
  19.  
  20. ARexx is the Amiga implementation of the REXX language.  Like BASIC,
  21. ARexx is an interpreted language.  ARexx can be used alone for almost
  22. any programming job, but the real power of ARexx is unleashed when it
  23. is used with applications as a system-level scripting language.  With
  24. the addition of its own ARexx port and a small amount of code, an
  25. application can gain all the power scripting capabilities offer.
  26. There are other benefits as well.  The burden of writing code to
  27. handle scripts is reduced significantly.  Also, ARexx helps provide a
  28. consistent interface to the user.  Without it, every developer who
  29. implements scripts must invent their own scripting language, forcing
  30. the user to learn several different scripting languages rather than
  31. just one.
  32.  
  33. Perhaps best of all is that applications which support ARexx can
  34. "talk" to each other by sending commands and sharing data - even if
  35. they are from different vendors.  For instance, a communications
  36. program with an ARexx port could be set up to automatically download
  37. data from a financial bulletin board and then pass the data to a
  38. spreadsheet application to create a graph or financial model.  The
  39. ability of applications to "talk" to one another on a multitasking
  40. computer is known as Inter-process Communication (IPC).
  41.  
  42. Because it interprets scripts and passes strings, ARexx has been
  43. optimized for string processing.  Almost all ARexx interactions
  44. involve passing a string; numbers are even passed as ASCII
  45. representations in most situations.
  46.  
  47. ARexx has enhanced abilities to send and receive control messages to
  48. and from many sources.  An application that supports ARexx can send
  49. and receive these control messages.  The messages contain text strings
  50. that are either interpreted directly by ARexx itself or that are
  51. passed on as commands to be processed by the destination application.
  52.  
  53. ARexx also supplies methods for applications to send and recieve data
  54. through an ARexx port.  The data can be sent in a message or via the
  55. ARexx RVI (Rexx Variable Interface).  In either case, data can be
  56. transferred to and from ARexx.  A complete ARexx supporting
  57. application would need to be able to send data to a requesting ARexx
  58. program/script and get data from that program.
  59.  
  60.  
  61.  
  62. The SimpleRexx Routines
  63.  
  64. Adding an ARexx interface to an application can be difficult,
  65. especially when working with it for the first time.  SimpleRexx was
  66. written to serve not only as an example of how to implement an ARexx
  67. interface but also as a "wrapper" to be incorporated into other code.
  68. It contains routines to take care of the lower level ARexx work. It
  69. can be used to add minimal ARexx support to many applications in a
  70. backwards-compatible fashion.  In other words, an application that
  71. uses SimpleRexx will still work on systems without ARexx (but won't be
  72. able to execute ARexx scripts).
  73.  
  74. The code below consists of SimpleRexx.c, the "wrapper" code that makes
  75. up the ARexx interface, and an example, SimpleRexxExample.c, which
  76. illustrates the use of the wrapper.  The test.rexx script is an
  77. example ARexx script to execute while SimpleRexxExample is running.
  78. It will send commands to SimpleRexxExample in order to control it.
  79. The test.results file shows the output of test.rexx.
  80.  
  81. In addition to the code examples listed here, you will need to install
  82. the rexxsyslib.library and rexxsupport.library in the libs: directory
  83. of the target machine.  Don't forget to give the rexxmast command
  84. either in your startup-sequence or from the CLI in order to start
  85. ARexx.
  86.  
  87.  
  88.  
  89. Overview of Functions
  90.  
  91. The source to SimpleRexx is a single file, SimpleRexx.c.  The header
  92. file, SimpleRexx.h, contains the type definitions and prototypes for
  93. the functions.
  94.  
  95. The SimpleRexx functions are used as follows:
  96.  
  97.     rexx_context=InitARexx(AppBaseName, Extension)
  98.  
  99.     This allocates and initializes a SimpleRexx ARexxContext
  100.     structure.  This context is much like a file handle in
  101.     that it will be used in all other calls that make use of
  102.     this SimpleRexx context.  Since all SimpleRexx calls
  103.     correctly check the rexx_context before doing work,
  104.     you do not need to check the return result of this call.
  105.     If ARexx is not available on your system, SimpleRexx
  106.     won't do anything.
  107.  
  108.  
  109.     port_name=ARexxName(rexx_context)
  110.  
  111.     This function returns a pointer to the name of the ARexx
  112.     port's context.  The name is based on the AppBaseName
  113.     plus an invocation number allowing multiple copies of an
  114.     application to run at the same time.  If you have no
  115.     ARexx port, it returns NULL.
  116.  
  117.  
  118.     sigmask=ARexxSignal(rexx_context)
  119.  
  120.     This function returns the signal bit mask of your
  121.     context's ARexx port.  This should be combined with
  122.     other signal masks to produce the argument to the Wait()
  123.     call.  This returns NULL if there is no signal mask.
  124.  
  125.     rmsg=GetARexxMsg(rexx_context)
  126.  
  127.     This function returns the next ARexx message that is
  128.     waiting.  rmsg=NULL if there is no message or ARexx is
  129.     not around.  rmsg=REXX_RETURN_ERROR if a message sent to
  130.     ARexx via SendARexxMsg() returns an error.
  131.  
  132.     ReplyARexxMsg(rexx_context, rmsg, result, error)
  133.  
  134.     This function sends back the ARexx message received via
  135.     GetARexxMsg().  The result field is a pointer to a
  136.     result string that is returned via OPTIONS RESULTS in
  137.     the RESULT ARexx variable.  If you have no result, set
  138.     this to NULL.  Error is the error severity level.  If
  139.     this is 0, the result string will be returned.  If this
  140.     is non-zero, the error level will be returned in RC.
  141.  
  142.     worked=SendARexxMsg(rexx_context, string, StringFileFlag)
  143.  
  144.     This function sends a string to ARexx.  It sets the
  145.     default host to the context and sets the RXFB_STRING bit
  146.     in the message if the StringFileFlag is set.  This
  147.     routine returns FALSE if the message was not sent.
  148.  
  149.     worked=SetARexxLastError(rexx_context, rmsg, ErrorString)
  150.  
  151.     This function uses the RVI (Rexx Variable Interface) to
  152.     set a variable named <AppBaseName>.LASTERROR to the
  153.     ErrorString.  This is where the error message should go
  154.     if there is an error.  This function returns FALSE if
  155.     this fails.  You must call this routine after a
  156.     GetARexxMsg() and before ReplyARexxMsg().
  157.  
  158.     FreeARexx(rexx_context)
  159.  
  160.     This closes a SimpleRexx context received from InitARexx().
  161.  
  162.  
  163.  
  164. The Future of ARexx
  165.  
  166. ARexx is much more than a system-level scripting language.  Among
  167. other things, ARexx can be used like glue to put together a set of
  168. application modules.  This frees the programmer from worrying about
  169. data sharing between modules so that more effort can be put into
  170. refining the code modules themselves. It also allows a user who
  171. understands ARexx to add their own refinements creating a truly custom
  172. environment.  This customizability is also ideal for VARs or dealers
  173. who want to sell vertical market solutions.
  174.